package com.rmb.system.aop.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;

/**
 * @author wan
 * @Title: IpInfoUtil
 * @Package utils
 * @Description: wan
 * @date 2021/1/229:09
 */
@Slf4j
@Component
public class IpInfoUtil {
    private static final String UNKNOWN="unknown";
    private static final String IP="127.0.0.1";
    private static final Integer LENGTH=15;

    public String getIpAddr(HttpServletRequest request){
        String ip = request.getHeader("x-forwarded-for");
        if(ip==null||ip.length()==0||UNKNOWN.equalsIgnoreCase(ip)){
            ip = request.getHeader("Proxy-Client-IP");
        }
        if(ip==null||ip.length()==0||UNKNOWN.equalsIgnoreCase(ip)){
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if(ip==null||ip.length()==0||UNKNOWN.equalsIgnoreCase(ip)){
            ip = request.getRemoteAddr();
            if(IP.equals(ip)){
                //根据网卡区本级配置的ip
                InetAddress inet = null;
                try {
                    inet = InetAddress.getLocalHost();
                }catch (Exception e){
                    e.printStackTrace();
                }
                assert inet != null;
                ip = inet.getHostAddress();
            }
        }
        //对于通过过个代理的情况,第一个ip作为客户端的真是IP,多个IP按照","分隔
        String str = "";
        if(ip!=null && ip.length()>LENGTH){
            if(ip.indexOf(str)>0){
                ip = ip.substring(0,ip.indexOf(","));
            }
        }
        String str1="0:0:0:0:0:0:0:1";
        if(str1.equals(ip)){
            ip="127.0.0.1";
        }
        return ip;
    }
}
